package com.lbl.dao;


import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.lbl.bean.Category;
import com.lbl.utils.JedisUtils;
import redis.clients.jedis.Jedis;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class CategoryDao {


    List<Category> result=null;

    static List<Category> list;

    static {
        //1：创建集合
        list = new ArrayList<>();
        //使用循环模拟数据，以后使用mybatis来查数据
        for (int i = 0; i < 10; i++) {
            list.add(new Category(i, "分类名" + i));
        }
    }

    public List<Category> findAll() throws IOException {
        //先访问redis,如果有数据，则直接返回
        //如果redis为空，则访问数据库
        Jedis redis = JedisUtils.getRedis();
        String json = redis.get("list");

        if (json == null) {
            //说明redis中没有，所以要去数据库查
            System.out.println("redis中没有数据，要从数据库中查询");

            //因为没有查到，所以说明redis没有该数据，所以为了下次能快速查找，我们将数据存入redis
            //这里不能直接存，而要将集合list转为json类型，再存
            ObjectMapper objectMapper = new ObjectMapper();
            String jsonValue = objectMapper.writeValueAsString(list);
            redis.set("list", jsonValue);
            return list;
        } else {
            //redis中有数据，所以可以直接返回
            //但这里有问题，就是redis中存的是string类型的数据
            //所以我们要将string转为list
            System.out.println("redis中有数据，直接获取redis缓存中的数据！");
            ObjectMapper objectMapper = new ObjectMapper();
            result = objectMapper.readValue(json, new TypeReference<List<Category>>() {});//将json转成对象   参1 json数据  参2
            return result;
        }
    }
}
